package br.slic.jsf;

import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.model.DualListModel;

import br.slic.entidade.Fornecedor;
import br.slic.entidade.Insumo;
import br.slic.exception.ServiceException;
import br.slic.services.interfaces.GenericServiceLocal;
import br.slic.util.DadosUtil;
import br.slic.util.SLICConstantes;

@ManagedBean
@ViewScoped
public class InsumoBean extends CRUD<Insumo> {

	private static final long serialVersionUID = 2760791677151819760L;

	@EJB
	private GenericServiceLocal genericService;
	
	private DualListModel<Fornecedor> fornecedores = new DualListModel<Fornecedor>();
	

	@Override
	protected List<Insumo> getEntidadesImpl() throws ServiceException {
		return genericService.obterEntidades(Insumo.class);
	}

	@Override
	protected void editarImpl() throws ServiceException {
		carregarFornecedores();
	}

	@Override
	protected void novoImpl() throws ServiceException {
		setEntidade(new Insumo());
		carregarFornecedores();
	}

	private void carregarFornecedores() throws ServiceException {
		List<Fornecedor> fornecedores = genericService.obterEntidades(Fornecedor.class);
		if (!DadosUtil.isEmpty(getEntidade().getId())) {
			fornecedores.removeAll(getEntidade().getFornecedores());
		}
		this.fornecedores = new DualListModel<Fornecedor>(fornecedores, getEntidade().getFornecedores());
	}
	
	@Override
	protected void salvarImpl() throws ServiceException {
		getEntidade().setFornecedores(fornecedores.getTarget());
		super.salvarImpl();
	}
	
	/**
	 * @return the fornecedores
	 */
	public DualListModel<Fornecedor> getFornecedores() {
		return fornecedores;
	}
	
	/**
	 * @param fornecedores the fornecedores to set
	 */
	public void setFornecedores(DualListModel<Fornecedor> fornecedores) {
		this.fornecedores = fornecedores;
	}
	
	@Override
	protected String getNomeFuncionalidade() {
		return SLICConstantes.NOME_FUNCIONALIDADE_INSUMOS;
	}
}
